package com.open.capacity.salary.service;

import com.open.capacity.salary.dto.GzRecordSalaryDto;
import com.open.capacity.salary.dto.ImportResult;
import com.open.capacity.salary.entity.GzRecordSalary;

import com.open.capacity.commons.PageResult;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;
import java.math.BigDecimal;
import java.util.Map;
import java.util.List;

/**
 * 工资系统工资录入表
 *
 * @author
 * @email
 * @date 2021-08-02 14:26:51
 */
public interface GzRecordSalaryService {
    /**
     * 添加
     *
     * @param gzRecordSalary
     */
    int save(GzRecordSalaryDto gzRecordSalary);


    /**
     * 工资月结
     *
     * @param companyId
     * @param ztId
     * @param month
     * @return
     */
    int nextMonth(String companyId, String ztId, String month);

    /**
     * 工资反月结
     *
     * @param companyId
     * @param ztId
     * @param month
     * @return
     */
    int preMonth(String companyId, String ztId, String month);

    /**
     * 批量保存
     *
     * @param list
     */
    int batchSave(String companyId, String ztId, List<GzRecordSalary> list);

    /**
     * 批量调整
     */
    int edit(String companyId, String ztId, String operate, String itemId, BigDecimal money);


    /**
     * 批量根据公式计算款项工资
     *
     * @param companyId
     */
    int calc(String companyId, String ztId);

    /**
     * 删除
     *
     * @param id
     */
    int delete(String id);


    /**
     * 删除不再账套内的用户
     *
     * @return
     */
    int deleteNotInZtUser(String companyId, String ztId, String month);

    /**
     * 转移历史工资数据到history表
     *
     * @return
     */
    int transferHistory();


    /**
     * 查询记录
     *
     * @param id
     * @return
     */
    GzRecordSalary findById(String id);

    /**
     * 查询个人工资
     *
     * @return
     */
    List<Map<String, Object>> findByUserid(String companyId, String ztId, String userid);

    /**
     * 分页
     *
     * @param params
     * @return
     */
    PageResult<Map<String, Object>> pageAll(Map<String, Object> params);

    /**
     * 列表
     *
     * @param params
     * @return
     */
    List<Map<String, Object>> findAll(Map<String, Object> params);


    /**
     * 获取sheet标签页
     *
     * @param multipartFile
     * @return
     */
    List<String> getExcelSheets(MultipartFile multipartFile) throws IOException;

    /**
     * 工资导入
     *
     * @param multipartFile
     * @return
     * @throws Exception
     */
    long importExcel(String companyId, String ztId, String category, String sheet, MultipartFile multipartFile) throws Exception;

    /**
     * 工资导入
     *
     * @param multipartFile
     * @return
     * @throws Exception
     */
    ImportResult importExcelExt(String companyId, String ztId, String category, String sheet, MultipartFile multipartFile) throws Exception;
}

